package com.winner;

import com.winner.service.MainConfigOfLifeCycle;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 还有一个小点要注意，spring中的Bean默认是不会lazy-init的，所以在启动过程就会调用getBean方法。如果不希望该Bean在启动过程就调用，那么将lazy-init设置为true，它就会在程序第一次使用的时候进行初始化。
 *
 * springboot中bean的几种初始化方法与销毁方法的执行顺序
 * afterPropertiesSet 优先于 initMethod执行顺序
 *  spring框架提供了若干接口,来改变bean的行为使用.  实现InitializingBean接口(重写afterPropertiesSet方法)  和 init-method指定初始化方法  达到一样的效果.
 */
public class IOCTest_LifeCycle {

	public static void main(String[] args) {
		// 1. 创建IOC容器
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
		MainConfigOfLifeCycle bean = applicationContext.getBean(MainConfigOfLifeCycle.class);
		// 关闭容器
		applicationContext.close();
//之前执行一些aware接口
//.. @PostConstruct ..  // 初始化前置处理
//.. InitializingBean afterPropertiesSet执行 ..  // 调用初始化方法 优先于@Bean(initMethod = "init")
//.. initMethod执行, bean初始化时    // 调用初始化方法
//.. postProcessBeforeInitialization .. // 初始化前置处理
//.. postProcessAfterInitialization .. // 初始化后置处理
	}
}
